///*******************************************************************************
// * Copyright 2017 Bstek
// *
// * Licensed under the Apache License, Version 2.0 (the "License"); you may not
// * use this file except in compliance with the License.  You may obtain a copy
// * of the License at
// *
// *   http://www.apache.org/licenses/LICENSE-2.0
// *
// * Unless required by applicable law or agreed to in writing, software
// * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
// * License for the specific language governing permissions and limitations under
// * the License.
// ******************************************************************************/
//package com.example.demo.excelprint;
//
//import ch.qos.logback.classic.Logger;
//import com.bstek.ureport.Utils;
//import com.bstek.ureport.build.paging.Page;
//import com.bstek.ureport.chart.ChartData;
//import com.bstek.ureport.definition.*;
//import com.bstek.ureport.exception.ReportComputeException;
//import com.bstek.ureport.export.FullPageData;
//import com.bstek.ureport.export.PageBuilder;
//import com.bstek.ureport.export.Producer;
//import com.bstek.ureport.export.SwapVariable;
//import com.bstek.ureport.model.Image;
//import com.bstek.ureport.model.*;
//import com.bstek.ureport.utils.ImageUtils;
//import com.itextpdf.text.*;
//import com.itextpdf.text.pdf.*;
//import com.xisoft.core.common.exception.BusinessException;
//import org.apache.commons.io.IOUtils;
//import org.apache.commons.lang.StringUtils;
//import org.slf4j.LoggerFactory;
//
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.OutputStream;
//import java.sql.SQLException;
//import java.util.*;
//import java.util.List;
//
//import static com.bstek.ureport.export.pdf.PdfFontSizeCompute.computeFontSize;
//
///**
// * @author Jacky.gao
// * @since 2017年3月10日
// */
//public class PdfProducer implements Producer {
//    private static Logger Log = (Logger) LoggerFactory.getLogger(PdfProducer.class);
//    @Override
//    public void produce(Report report, OutputStream outputStream) {
//        // 判断是否是归档数据
//        String pigeonholeId = (String) report.getContext().getParameters().get("pigeonholeId");
//        if(StringUtils.isNotBlank(pigeonholeId)){
//            try {
//                Report pigeonholeReport = Utils.reSerReport(pigeonholeId);
//                if(pigeonholeReport != null){
//                    report = pigeonholeReport;
//                }else{
//                    throw new BusinessException("归档文件缺失，请重新归档。");
//                }
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//        Paper paper = report.getPaper();
//        int width = paper.getWidth();
//        int height = paper.getHeight();
//        Rectangle pageSize = new RectangleReadOnly(width, height);
//        if (paper.getOrientation().equals(Orientation.landscape)) {
//            pageSize = pageSize.rotate();
//        }
//        int leftMargin = paper.getLeftMargin();
//        int rightMargin = paper.getRightMargin();
//        int topMargin = paper.getTopMargin();
//        int bottomMargin = paper.getBottomMargin();
//        // 是否开启缩印
//        boolean narrowPrint = paper.getNarrowPrint();
//        // 缩印比例
//        float cellPersent = paper.getCellPersent();
//        if (cellPersent == 0){
//            cellPersent = 1f;
//        }
//        Document document = new Document(pageSize, leftMargin, rightMargin, topMargin, bottomMargin);
//        try {
//
//            SwapVariable.setThreadReportVariable(report);
//            PdfWriter writer = PdfWriter.getInstance(document, outputStream);
//            PageHeaderFooterEvent headerFooterEvent = new PageHeaderFooterEvent(report);
//            writer.setPageEvent(headerFooterEvent);
//            String isEncryption = (String) report.getContext().getParameters().get("isEncryption");
//            if("1".equals(isEncryption) && !StringUtils.isEmpty(paper.getEncryption()) && !"undefined".equals(paper.getEncryption())){
//                Utils.setEncryptionForPDF(writer, paper.getEncryption());
//            }
//            document.open();
//            List<Column> columns = report.getColumns();
//            List<Integer> columnsWidthList = new ArrayList<>();
//            int[] intArr = buildColumnSizeAndTotalWidth(columns, columnsWidthList);
//            int colSize = intArr[0], totalWidth = intArr[1];
//            int[] columnsWidth = new int[columnsWidthList.size()];
//            for (int i = 0; i < columnsWidthList.size(); i++) {
//                columnsWidth[i] = columnsWidthList.get(i);
//            }
//            FullPageData pageData = PageBuilder.buildFullPageData(report);
//            List<List<Page>> list = pageData.getPageList();
//
//            //判断是否加载过图表类型单元格,解决当图表位置进行分页时,图表会在两页都进行显示的问题.改为只在上一页显示图表.
//            Set<String> loadChartCell = new HashSet<>();
//            if (list.size() > 0) {
//                int columnCount = paper.getColumnCount();
//                int w = columnCount * totalWidth + (columnCount - 1) * paper.getColumnMargin();
//                int size = columnCount + (columnCount - 1);
//                int[] widths = new int[size];
//                for (int i = 0; i < size; i++) {
//                    int mode = (i + 1) % 2;
//                    if (mode == 0) {
//                        widths[i] = paper.getColumnMargin();
//                    } else {
//                        widths[i] = totalWidth;
//                    }
//                }
//                float tableHeight = pageSize.getHeight() - paper.getTopMargin() - paper.getBottomMargin();
//                Map<Row, Map<Column, Cell>> cellMap = report.getRowColCellMap();
//
//                for (List<Page> pages : list) {
//                    PdfPTable table = new PdfPTable(size);
//                    setPdfPTableVal(table, narrowPrint);
//                    table.setTotalWidth(w);
//                    table.setWidths(widths);
//                    table.setHorizontalAlignment(Element.ALIGN_LEFT);
//                    int ps = pages.size();
//                    for (int i = 0; i < ps; i++) {
//                        if (i > 0) {
//                            PdfPCell pdfMarginCell = new PdfPCell();
//                            pdfMarginCell.setBorder(Rectangle.NO_BORDER);
//                            table.addCell(pdfMarginCell);
//                        }
//                        Page page = pages.get(i);
//
//                        PdfPTable childTable = new PdfPTable(colSize);
//                        setPdfPTableVal(childTable, narrowPrint);
//                        childTable.setTotalWidth(totalWidth);
//                        childTable.setWidths(columnsWidth);
//                        childTable.setHorizontalAlignment(Element.ALIGN_LEFT);
//                        List<Row> rows = page.getRows();
//                        for (Row row : rows) {
//                            Map<Column, Cell> colMap = cellMap.get(row);
//                            if (colMap == null) {
//                                continue;
//                            }
//                            for (Column col : columns) {
//                                if (col.getWidth() < 1) {
//                                    continue;
//                                }
//                                Cell cell = colMap.get(col);
//                                if (cell == null) {
//                                    continue;
//                                }
//                                int cellHeight = buildCellHeight(cell, rows);
//                                int cellWidth = buildCellWidth(cell, columns);
//                                PdfPCell pdfcell = buildPdfPCell(cell, cellHeight, cellWidth,narrowPrint, cellPersent, loadChartCell );
//                                childTable.addCell(pdfcell);
//                            }
//                        }
//                        float childTableHeight = childTable.calculateHeights();
//                        if (tableHeight > childTableHeight) {
//                            for (int j = 0; j < columns.size(); j++) {
//                                PdfPCell lastCell = new PdfPCell();
//                                lastCell.setBorder(Rectangle.NO_BORDER);
//                                childTable.addCell(lastCell);
//                            }
//                        }
//                        PdfPCell pdfContainerCell = new PdfPCell(childTable);
//                        pdfContainerCell.setBorder(Rectangle.NO_BORDER);
//                        table.addCell(pdfContainerCell);
//                    }
//                    if (ps < columnCount) {
//                        int left = columnCount - ps;
//                        for (int i = 0; i < left; i++) {
//                            PdfPCell pdfMarginCell = new PdfPCell();
//                            pdfMarginCell.setBorder(Rectangle.NO_BORDER);
//                            table.addCell(pdfMarginCell);
//                            pdfMarginCell = new PdfPCell();
//                            pdfMarginCell.setBorder(Rectangle.NO_BORDER);
//                            table.addCell(pdfMarginCell);
//                        }
//                    }
//                    document.add(table);
//                //    setPDFWatermark(writer, pages.size());
//                    if(!StringUtils.isEmpty(report.getRepWatermarkConfigCode())) {
//                 	   try {
//                 		   setPDFWatermark(writer, pages.size(),report.getRepWatermarkConfigCode());
//                 	   }catch(Exception e) {
//                 		   Log.error("----PdfProducer--->watermark,Exception:" + e.getMessage());
//                 	   }
//                    }
//                    document.newPage();
//                }
//            }
//            else {
//                List<Page> pages = report.getPages();
//                Map<Row, Map<Column, Cell>> cellMap = report.getRowColCellMap();
//
//               for (Page page : pages) {
//                   PdfPTable table = new PdfPTable(colSize);
//                   setPdfPTableVal(table, narrowPrint);
//                   table.setTotalWidth(totalWidth);
//                   table.setWidths(columnsWidth);
//                   table.setHorizontalAlignment(Element.ALIGN_LEFT);
//                   List<Row> rows = page.getRows();
//
//                   for (Row row : rows) {
//                       Map<Column, Cell> colMap = cellMap.get(row);
//                       if (colMap == null) {
//                           continue;
//                       }
//                       if(row.getRealHeight() > height){
//                           throw new ReportComputeException("single line > page height");
//                       }
//                       for (Column col : columns) {
//                           if (col.getWidth() < 1) {
//                               continue;
//                           }
//                           Cell cell = colMap.get(col);
//                           if (cell == null) {
//                               continue;
//                           }
//                           int fistFontSize = 10;
//                           if(cell.getCellStyle() != null){
//                               fistFontSize = cell.getCellStyle().getFontSize();
//                           }
//                           int cellHeight = buildCellHeight(cell, rows);
//                           // 宽
//                           int cellWidth = buildCellWidth(cell, columns);
//                           Boolean wrapCompute = cell.getCellStyle().getWrapCompute();
//                           // 页面设置中是否开启自动扩展行高
//                           if (!report.getPaper().isExtendRowHeight()) {
//                               // 单元格是否开启自适应字体，如果开启换行计算，则不进行字号自适应
//                               if (null == wrapCompute || (null != wrapCompute && !wrapCompute)) {
//                                   Boolean fontCompute = cell.getCellStyle().getFontCompute();
//                                   if (null != fontCompute && fontCompute && cellWidth > 0) {
//                                       cell.getCellStyle().setFontSize(computeFontSize(cell, col, columns, row, rows));
//                                   }
//                               }
//                           }
//
//                           PdfPCell pdfcell = buildPdfPCell(cell, cellHeight,cellWidth, narrowPrint, cellPersent,loadChartCell);
//                           table.addCell(pdfcell);
//                           int lastFontSize = 10;
//                           if (cell.getCellStyle() != null){
//                              lastFontSize = cell.getCellStyle().getFontSize();
//                           }
//                           if(lastFontSize != fistFontSize){
//                               // 解决值传递导致单元格扩展后，缩小字号大小都一样问题 4399
//                               cell.getCellStyle().setFontSize(fistFontSize);
//                           }
//                       }
//                   }
//                   document.add(table);
//                  // setPDFWatermark(writer, pages.size());
//                   if(!StringUtils.isEmpty(report.getRepWatermarkConfigCode())) {
//                	   try {
//                		   setPDFWatermark(writer, pages.size(),report.getRepWatermarkConfigCode());
//                	   }catch(Exception e) {
//                		   Log.error("----PdfProducer--->watermark,Exception:" + e.getMessage());
//                	   }
//                   }
//                   document.newPage();
//               }
//            }
//       //     document.close();
//        } catch (Exception ex) {
//            throw new ReportComputeException(ex);
//        } finally {
//            try {
//	    		document.close();
//	    	}catch(Error error) {
//	    		Log.error("--->buildPdf--->PdfProducer--->document.close Exception : " + (error!=null?error.getMessage():""));
//	    	}
//            //rfid:来源李宁,rfid需求需删clean
//            //SwapVariable.clean();
//        }
//    }
//
//    // 对PdfPTable判断赋值缩印
//    public void setPdfPTableVal(PdfPTable pdfPTable, boolean bl){
//        if(bl){
//            pdfPTable.setWidthPercentage(100);
//            pdfPTable.setLockedWidth(false);
//        }else{
//            pdfPTable.setLockedWidth(true);
//        }
//
//    }
//
//    /**
//     * @author lizg
//     * @since 20230423
//     * @param writer
//     * @param totalPageNum
//     * @param waterConfigCode
//     * @throws DocumentException
//     * @throws IOException
//     * @throws SQLException
//     */
//    private void setPDFWatermark(PdfWriter writer, int totalPageNum,String waterConfigCode) throws DocumentException, IOException, SQLException {
//    	if(StringUtils.isEmpty(waterConfigCode)) {
//			return;
//		}
//    	String[] congifCode = waterConfigCode.split(",");
//        Watermark watermark = new Watermark(congifCode);
//        if (null == watermark || watermark.isEmpty()) {
//            return;
//        }
//        List<Watermark> watermarkList = watermark.getWatermarkList();
//        for(int i = 0 ; i < watermarkList.size() ; i++){
//            int bcp_mode = watermarkList.get(i).getBcpMode();
//            if(bcp_mode == 2 && writer.getCurrentPageNumber()!=1){
//                continue;
//            }
//            if(bcp_mode == 3 && writer.getCurrentPageNumber()!=totalPageNum){
//                continue;
//            }
//            String ImgAddr = watermarkList.get(i).getImgAddr();
//            String bcp_text = watermarkList.get(i).getBcpText();
//            String bcp_color = watermarkList.get(i).getBcpColor();
//            String bcp_tmd = watermarkList.get(i).getBcpTmd();
//            Integer bcp_size = watermarkList.get(i).getBcpSize();
//            int bcp_positionx = watermarkList.get(i).getBcpPositionX();
//            int bcp_positiony = watermarkList.get(i).getBcpPositionY();
//            int bcp_jd = Integer.valueOf(watermarkList.get(i).getBcpAngle());//水印旋转角度
//            int bcp_type = watermarkList.get(i).getBcpType();
//            int bcpImgW = watermarkList.get(i).getBcpImgW();
//            int bcpImgH = watermarkList.get(i).getBcpImgH();
//            // 背景水印
//            PdfContentByte waterMar = writer.getDirectContentUnder();
//            //如果是印章类型，改为前景水印；2-首页显示，3-尾页显示
//            if(bcp_mode == 2 || bcp_mode == 3){
//                Log.info("前景水印");
//                waterMar = writer.getDirectContent();
//            }
//            // 开始设置水印
//            waterMar.beginText();
//            // 设置水印透明度
//            PdfGState gs = new PdfGState();
//            // 设置填充字体不透明度为0.4f
//            gs.setFillOpacity(Float.parseFloat(bcp_tmd));
//            // 设置水印字体参数及大小(字体参数，字体编码格式，是否将字体信息嵌入到pdf中（一般不需要嵌入），字体大小)
//            BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
//            waterMar.setFontAndSize(base, bcp_size);
//            // waterMar.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED), Float.parseFloat(bcp_size));
//            // 设置透明度
//            waterMar.setGState(gs);
//            // 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度
//            // 设置水印颜色
//            String[] rgbList = bcp_color.split(",");
//            waterMar.setColorFill(new BaseColor(Integer.parseInt(rgbList[0]), Integer.parseInt(rgbList[1]), Integer.parseInt(rgbList[2])));
//            // 文字
//            if (bcp_type == 0 || bcp_type == 2) {
//                // 模式 0平铺模式 1 指定坐标
//                if (bcp_mode == 0) {
//                    int height = (int) writer.getPageSize().getHeight();
//                    int width = (int) writer.getPageSize().getWidth();
//                    int bcp_xnum = watermarkList.get(i).getBcpXNum();
//                    int bcp_ynum = watermarkList.get(i).getBcpYNum();
//                    int xDistance = (width / bcp_xnum);
//                    int yDistance = height / bcp_ynum;
//                    for (int j = 10; j < height; j += yDistance) {
//                        for (int k = 10; k < width; k += xDistance) {
//                            waterMar.showTextAligned(Element.ALIGN_LEFT, bcp_text, k, j, bcp_jd);
//                        }
//                    }
//                } else {
//                    waterMar.showTextAligned(Element.ALIGN_LEFT, bcp_text, bcp_positionx, bcp_positiony, bcp_jd);
//                }
//            }
//            // 图片
//            if (!ImgAddr.equals("") && (bcp_type == 1 || bcp_type == 2)) {
//                if (bcp_mode == 0) {
//                    int height = (int) writer.getPageSize().getHeight();
//                    int width = (int) writer.getPageSize().getWidth();
//                    int bcp_xnum = watermarkList.get(i).getBcpXNum();
//                    int bcp_ynum = watermarkList.get(i).getBcpYNum();
//                    int xDistance = (width / bcp_xnum);
//                    int yDistance = height / bcp_ynum;
//                    for (int j = 10; j < height; j += yDistance) {
//                        for (int k = 10; k < width; k += xDistance) {
//                            Image image = Image.getInstance(ImgAddr);
//                            image.setRotationDegrees(bcp_jd);//旋转
//                            image.scaleToFit(bcpImgW, bcpImgH);
//                            image.setAbsolutePosition(k, j); // set the first background
//                            waterMar.addImage(image);
//                        }
//                    }
//                } else {
//
//                    Image image = Image.getInstance(ImgAddr);
//                    image.setRotationDegrees(bcp_jd);//旋转
//                    image.scaleToFit(bcpImgW, bcpImgH);
//                    image.setAbsolutePosition(bcp_positionx, bcp_positiony); // set the first background
//                    waterMar.addImage(image);
//                }
//            }
//            //结束设置
//            waterMar.endText();
//            waterMar.stroke();
//        }
//    }
//
//    private void setPDFWatermark(PdfWriter writer, int totalPageNum) throws DocumentException, IOException, SQLException {
//        Watermark watermark = new Watermark();
//        if (watermark.isEmpty()) {
//            return;
//        }
//        List<Watermark> watermarkList = watermark.getWatermarkList();
//        for(int i = 0 ; i < watermarkList.size() ; i++){
//            int bcp_mode = watermarkList.get(i).getBcpMode();
//            if(bcp_mode == 2 && writer.getCurrentPageNumber()!=1){
//                continue;
//            }
//            if(bcp_mode == 3 && writer.getCurrentPageNumber()!=totalPageNum){
//                continue;
//            }
//            String ImgAddr = watermarkList.get(i).getImgAddr();
//            String bcp_text = watermarkList.get(i).getBcpText();
//            String bcp_color = watermarkList.get(i).getBcpColor();
//            String bcp_tmd = watermarkList.get(i).getBcpTmd();
//            Integer bcp_size = watermarkList.get(i).getBcpSize();
//            int bcp_positionx = watermarkList.get(i).getBcpPositionX();
//            int bcp_positiony = watermarkList.get(i).getBcpPositionY();
//            int bcp_jd = Integer.valueOf(watermarkList.get(i).getBcpAngle());//水印旋转角度
//            int bcp_type = watermarkList.get(i).getBcpType();
//            int bcpImgW = watermarkList.get(i).getBcpImgW();
//            int bcpImgH = watermarkList.get(i).getBcpImgH();
//            // 背景水印
//            PdfContentByte waterMar = writer.getDirectContentUnder();
//            //如果是印章类型，改为前景水印；2-首页显示，3-尾页显示
//            if(bcp_mode == 2 || bcp_mode == 3){
//                Log.info("前景水印");
//                waterMar = writer.getDirectContent();
//            }
//            // 开始设置水印
//            waterMar.beginText();
//            // 设置水印透明度
//            PdfGState gs = new PdfGState();
//            // 设置填充字体不透明度为0.4f
//            gs.setFillOpacity(Float.parseFloat(bcp_tmd));
//            // 设置水印字体参数及大小(字体参数，字体编码格式，是否将字体信息嵌入到pdf中（一般不需要嵌入），字体大小)
//            BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
//            waterMar.setFontAndSize(base, bcp_size);
//            // waterMar.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED), Float.parseFloat(bcp_size));
//            // 设置透明度
//            waterMar.setGState(gs);
//            // 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度
//            // 设置水印颜色
//            String[] rgbList = bcp_color.split(",");
//            waterMar.setColorFill(new BaseColor(Integer.parseInt(rgbList[0]), Integer.parseInt(rgbList[1]), Integer.parseInt(rgbList[2])));
//            // 文字
//            if (bcp_type == 0 || bcp_type == 2) {
//                // 模式 0平铺模式 1 指定坐标
//                if (bcp_mode == 0) {
//                    int height = (int) writer.getPageSize().getHeight();
//                    int width = (int) writer.getPageSize().getWidth();
//                    int bcp_xnum = watermarkList.get(i).getBcpXNum();
//                    int bcp_ynum = watermarkList.get(i).getBcpYNum();
//                    int xDistance = (width / bcp_xnum);
//                    int yDistance = height / bcp_ynum;
//                    for (int j = 10; j < height; j += yDistance) {
//                        for (int k = 10; k < width; k += xDistance) {
//                            waterMar.showTextAligned(Element.ALIGN_LEFT, bcp_text, k, j, bcp_jd);
//                        }
//                    }
//                } else {
//                    waterMar.showTextAligned(Element.ALIGN_LEFT, bcp_text, bcp_positionx, bcp_positiony, bcp_jd);
//                }
//            }
//            // 图片
//            if (!ImgAddr.equals("") && (bcp_type == 1 || bcp_type == 2)) {
//                if (bcp_mode == 0) {
//                    int height = (int) writer.getPageSize().getHeight();
//                    int width = (int) writer.getPageSize().getWidth();
//                    int bcp_xnum = watermarkList.get(i).getBcpXNum();
//                    int bcp_ynum = watermarkList.get(i).getBcpYNum();
//                    int xDistance = (width / bcp_xnum);
//                    int yDistance = height / bcp_ynum;
//                    for (int j = 10; j < height; j += yDistance) {
//                        for (int k = 10; k < width; k += xDistance) {
//                            Image image = Image.getInstance(ImgAddr);
//                            image.setRotationDegrees(bcp_jd);//旋转
//                            image.scaleToFit(bcpImgW, bcpImgH);
//                            image.setAbsolutePosition(k, j); // set the first background
//                            waterMar.addImage(image);
//                        }
//                    }
//                } else {
//
//                    Image image = Image.getInstance(ImgAddr);
//                    image.setRotationDegrees(bcp_jd);//旋转
//                    image.scaleToFit(bcpImgW, bcpImgH);
//                    image.setAbsolutePosition(bcp_positionx, bcp_positiony); // set the first background
//                    waterMar.addImage(image);
//                }
//            }
//            //结束设置
//            waterMar.endText();
//            waterMar.stroke();
//        }
//    }
//
//
//    private int buildCellHeight(Cell cell, List<Row> rows) {
//        int height = cell.getRow().getRealHeight();
//        int rowSpan = cell.getPageRowSpan();
//        if (rowSpan > 0) {
//            int pos = rows.indexOf(cell.getRow());
//            int start = pos + 1, end = start + rowSpan - 1;
//            for (int i = start; i < end; i++) {
//                height += rows.get(i).getRealHeight();
//            }
//        }
//        return height;
//    }
//
//    private int buildCellWidth(Cell cell, List<Column> columns) {
//        int width = cell.getColumn().getWidth();
//        int columnsSpan = cell.getColSpan();
//        if (columnsSpan > 1) {
//            int pos = columns.indexOf(cell.getColumn());
//            int start = pos + 1, end = start + columnsSpan - 1;
//            for (int i = start; i < end; i++) {
//                width += columns.get(i).getWidth();
//            }
//        }
//        return width;
//    }
//
//    private PdfPCell buildPdfPCell(Cell cellInfo, int cellHeight, int cellWidth,boolean narrowPrint, float cellPersent,Set<String> loadChartCell ) throws Exception {
//        CellStyle style = cellInfo.getCellStyle();
//        CellStyle customStyle = cellInfo.getCustomCellStyle();
//        CellStyle rowStyle = cellInfo.getRow().getCustomCellStyle();
//        CellStyle colStyle = cellInfo.getColumn().getCustomCellStyle();
//        PdfPCell cell = newPdfCell(cellInfo, cellHeight,cellWidth, loadChartCell );
//        cell.setPadding(0);
//        cell.setBorder(PdfPCell.NO_BORDER);
//        //内容水平垂直居中开关
//        cell.setUseAscender(true);
//
//        if (narrowPrint){
//            cell.getPhrase().getFont().setSize(cell.getPhrase().getFont().getSize() * cellPersent);
//        }
//
//        cell.setCellEvent(new CellBorderEvent(style, customStyle));
//        int rowSpan = cellInfo.getPageRowSpan();
//        if (rowSpan > 0) {
//            cell.setRowspan(rowSpan);
//        }
//        int colSpan = cellInfo.getColSpan();
//        if (colSpan > 0) {
//            cell.setColspan(colSpan);
//        }
//        Alignment align = style.getAlign();
//        if (customStyle != null && customStyle.getAlign() != null) {
//            align = customStyle.getAlign();
//        }
//        if (rowStyle != null && rowStyle.getAlign() != null) {
//            align = rowStyle.getAlign();
//        }
//        if (colStyle != null && colStyle.getAlign() != null) {
//            align = colStyle.getAlign();
//        }
//        if (align != null) {
//            if (align.equals(Alignment.left)) {
//                cell.setHorizontalAlignment(Element.ALIGN_LEFT);
//            } else if (align.equals(Alignment.center)) {
//                cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            } else if (align.equals(Alignment.right)) {
//                cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
//            }
//        }
//        Alignment valign = style.getValign();
//        if (customStyle != null && customStyle.getValign() != null) {
//            valign = customStyle.getValign();
//        }
//        if (rowStyle != null && rowStyle.getValign() != null) {
//            valign = rowStyle.getValign();
//        }
//        if (colStyle != null && colStyle.getValign() != null) {
//            valign = colStyle.getValign();
//        }
//        if (valign != null) {
//            if (valign.equals(Alignment.top)) {
//                cell.setVerticalAlignment(Element.ALIGN_TOP);
//            } else if (valign.equals(Alignment.middle)) {
//                cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            } else if (valign.equals(Alignment.bottom)) {
//                cell.setVerticalAlignment(Element.ALIGN_BOTTOM);
//            }
//        }
//        String bgcolor = style.getBgcolor();
//        if (customStyle != null && StringUtils.isNotBlank(customStyle.getBgcolor())) {
//            bgcolor = customStyle.getBgcolor();
//        }
//        if (rowStyle != null && StringUtils.isNotBlank(rowStyle.getBgcolor())) {
//            bgcolor = rowStyle.getBgcolor();
//        }
//        if (colStyle != null && StringUtils.isNotBlank(colStyle.getBgcolor())) {
//            bgcolor = colStyle.getBgcolor();
//        }
//        if (StringUtils.isNotEmpty(bgcolor)) {
//            String[] colors = bgcolor.split(",");
//            cell.setBackgroundColor(new BaseColor(Integer.valueOf(colors[0]), Integer.valueOf(colors[1]), Integer.valueOf(colors[2])));
//        }
//        return cell;
//    }
//
//    private int[] buildColumnSizeAndTotalWidth(List<Column> columns, List<Integer> list) {
//        int count = 0, totalWidth = 0;
//        for (int i = 0; i < columns.size(); i++) {
//            Column col = columns.get(i);
//            int width = col.getWidth();
//            if (width < 1) {
//                continue;
//            }
//            count++;
//            list.add(width);
//            totalWidth += width;
//        }
//        return new int[]{count, totalWidth};
//    }
//
//    private PdfPCell newPdfCell(Cell cellInfo, int cellHeight,int cellWidth,Set<String> loadChartCell ) throws Exception {
//        PdfPCell cell = null;
//        Object cellData = cellInfo.getFormatData();
//        if (cellData instanceof Image) {
//            Image img = (Image) cellData;
//            //生成的图片不超过单元格边框
//            boolean fit = true;
//            cell = new PdfPCell(buildPdfImage(img.getBase64Data(), img.getWidth(), img.getHeight(),cellData),fit);
//            cell.setFixedHeight(cellHeight);
//        } else if (cellData instanceof ChartData) {
//            ChartData chartData = (ChartData) cellData;
//            String base64Data = chartData.retriveBase64Data();
//            if (base64Data != null) {
////                Image img = new Image(base64Data, chartData.getWidth(), chartData.getHeight());
////                cell = new PdfPCell(buildPdfImage(img.getBase64Data(), img.getWidth(), img.getHeight()));
//                boolean loadChartCellFlag = loadChartCell.contains(cellInfo.getName());
//                if (!loadChartCellFlag) {
//                    loadChartCell.add(cellInfo.getName());
//                    Image img = new Image(base64Data, cellWidth, cellHeight);
//                    cell = new PdfPCell(buildPdfImage(img.getBase64Data(), cellWidth, cellHeight,cellData));
//                }else {
//                    cell = new PdfPCell();
//                }
//            } else {
//                cell = new PdfPCell();
//                CellPhrase pargraph = new CellPhrase(cellInfo, "");
//                cell.setPhrase(pargraph);
//                cell.setFixedHeight(cellHeight);
////                cell.setFixedHeight(1598);
//            }
//        } else {
//            cell = new PdfPCell();
////            if(cellData != null){
////                cellData = getMutipleStr(String.valueOf(cellData), cellInfo.getColumn().getWidth(), cellInfo.getCellStyle().getFont());
////            }
//
//            CellPhrase pargraph = new CellPhrase(cellInfo, cellData);
//            cell.setPhrase(pargraph);
//            cell.setFixedHeight(cellHeight);
//        }
//        CellStyle style = cellInfo.getCellStyle();
//
//        if(cellInfo.getExistRowBreak()) {
//            if (style != null && style.getLineHeight() > 0) {
////                cell.setLeading(style.getLineHeight(), style.getLineHeight());
//                cell.setLeading(0f, style.getLineHeight());
//            }
//            else {
//                cell.setLeading((float) 1, (float) 1);
//            }
//        }else{
//            if (style != null && style.getLineHeight() > 0) {
////                cell.setLeading(style.getLineHeight(), style.getLineHeight());
//                cell.setLeading(0f, style.getLineHeight());
//            }
//        }
//
//        return cell;
//    }
//
//    private Image buildPdfImage(String base64Data, int width, int height,Object cellData) throws Exception {
//        Image pdfImg = null;
//        InputStream input = ImageUtils.base64DataToInputStream(base64Data);
//        try {
//            byte[] bytes = IOUtils.toByteArray(input);
//            pdfImg = Image.getInstance(bytes);
//            if (cellData instanceof ChartData){
//                float imgWidth = pdfImg.getWidth();
//                float imgHeight = pdfImg.getHeight();
//                if (width == 0) {
//                    width = Float.valueOf(imgWidth).intValue();
//                }
//                if (height == 0) {
//                    height = Float.valueOf(imgHeight).intValue();
//                }
////                width = UnitUtils.pixelToPoint(width);
////                height = UnitUtils.pixelToPoint(height);
//                pdfImg.scaleToFit(width, height);
//            }
//        } finally {
//            IOUtils.closeQuietly(input);
//        }
//        return pdfImg;
//    }
//}
